// 在函数式编程里面是很重要的
// function sum(num1: number | { length: number }, num2: number | { length: number }) {
//     // return num1 + num2
// }

// sum(20, 30)
// sum(50, 60)


// 类型的参数化
// 在定义函数时，我不决定这些参数的类型
// 而是让调用者以参数的形式告知，我这里的函数参数应该是什么类型
// 将类型提取到前面做参数化
function sum<Type>(num: Type): Type {
    return num
}

// 调用方式1:明确的传入类型
sum<number>(20)
sum<{ a: number }>({ a: 1 })
sum<any[]>(['abc'])

// 调用方式2:类型推导 推导为字面量类型
sum(50)

export {}